<!DOCTYPE html>
<html>
<head>
  <title>Text Range tests</title>
  <link rel="stylesheet" type="text/css"
        href="chrome://mochikit/content/tests/SimpleTest/test.css" />

  <script type="application/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript"
          src="../common.js"></script>
  <script type="application/javascript"
          src="../text.js"></script>
  <script type="application/javascript"
          src="../layout.js"></script>
  <script type="application/javascript">

    function doTest()
    {
      // enclosingRange
      var input = getAccessible("input", [ nsIAccessibleText ]);
      testTextRange(input.enclosingRange, "enclosing range for 'input'",
                    input, 0, input, 5, "hello", input);

      var ta = getAccessible("textarea", [ nsIAccessibleText ]);
      testTextRange(ta.enclosingRange, "enclosing range for 'textarea'",
                    ta, 0, ta, 5, "hello", textarea);

      var iframeDocNode = getNode("iframe").contentDocument;
      var iframeDoc = getAccessible(iframeDocNode, [ nsIAccessibleText ]);
      testTextRange(iframeDoc.enclosingRange, "enclosing range for iframe doc",
                    iframeDoc, 0, iframeDoc, 1, "hello",
                    iframeDoc, [ getNode("p", iframeDocNode) ]);

      // getRangeByChild
      var docacc = getAccessible(document, [ nsIAccessibleText ]);
      var p1 = getAccessible("p1");
      var p1Range = docacc.getRangeByChild(p1);
      testTextRange(p1Range, "range by 'p1' child",
                    p1, 0, "p1", 11, "text  text",
                    p1, ["p1_img"]);

      testTextRange(docacc.getRangeByChild(getAccessible("p1_img")),
                    "range by 'p1_img' child",
                    "p1", 5, "p1", 5, "",
                    "p1", ["p1_img"]);

      var p2 = getAccessible("p2");
      var p2Range = docacc.getRangeByChild(p2);
      testTextRange(p2Range, "range by 'p2' child",
                    p2, 0, "p2", 11, "text link text",
                    p2, ["p2_a"]);

      testTextRange(docacc.getRangeByChild(getAccessible("p2_a")),
                    "range by 'p2_a' child",
                    "p2_a", 0, "p2_a", 5, "link",
                    "p2_a", ["p2_img"]);

      // getRangeAtPoint
      getNode("p2_a").scrollIntoView(true);
      var [x, y] = getPos("p2_a");
      testTextRange(docacc.getRangeAtPoint(x + 1, y + 1),
                    "range at 'p2_a' top-left edge",
                    "p2_a", 0, "p2_a", 0, "",
                    "p2_a");

      // TextRange::compare
      ok(input.enclosingRange.compare(input.enclosingRange),
         "input enclosing ranges should be equal");

      ok(!input.enclosingRange.compare(ta.enclosingRange),
         "input and textarea enclosing ranges can't be equal");

      // TextRange::compareEndPoints
      var res = p1Range.compareEndPoints(EndPoint_End, p2Range, EndPoint_Start);
      is(res, -1, "p1 range must be lesser with p2 range");

      res = p2Range.compareEndPoints(EndPoint_Start, p1Range, EndPoint_End);
      is(res, 1, "p2 range must be greater with p1 range");

      res = p1Range.compareEndPoints(EndPoint_Start, p1Range, EndPoint_Start);
      is(res, 0, "p1 range must be equal with p1 range");

      SimpleTest.finish();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(doTest);
  </script>
</head>
<body>

  <a target="_blank"
     title="Implement Text accessible text range methods"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=975065">Bug 975065</a>
  <p id="display"></p>
  <div id="content" style="display: none"></div>
  <pre id="test">
  </pre>

  <input id="input" value="hello">
  <textarea id="textarea">hello</textarea>
  <iframe id="iframe" src="data:text/html,<html><body><p id='p'>hello</p></body></html>"></iframe>
  <p id="p1">text <img id="p1_img", src="../moz.png"> text</p>
  <p id="p2">text <a id="p2_a" href="www">link<img id="p2_img", src="../moz.png"></a> text</p>

</body>
</html>
